package com.person.dic.action;



import java.util.List;
import java.util.regex.Pattern;

import org.apache.struts2.interceptor.validation.SkipValidation;

import com.opensymphony.xwork2.ActionContext;
import com.person.commons.struts2.BaseAction;
import com.person.dic.model.Dic;
import com.person.dic.service.DicService;
import com.person.sys.model.SysCode;

public class DicAction extends BaseAction {
    private Dic dic;
    private DicService dicService;
    private List<Dic> dics;
    private String dicId;
  	private String dicNo;
  	private String dicName;
  	private String dicOrder;
  	private String dicNoParent;
  	private String dicNameEn;
  	private String selectNo;
      
      /**
       * 返回系统代码管理框架右侧默认页
       * 
       */
  	@SkipValidation
      public String blank(){
    		 return "blank";
      }
      
      
      /**
       * 返回添加系统顶级代码页面
       * 
       */
  	@SkipValidation
      public String createTop(){
    		 return "input";
      }
      
      /**
       * 查找系统主分类代码
       * 用于返回到左边的管理页面
       */
  	@SkipValidation
      public String admin(){
    	  dics=dicService.searchAllTopCode();
    	 if(dics.size()>0){
    		 return "admin";
    	 }else{
       	  return "info"; 
    	 }
      }
        
      /**
       * 查找系统主分类代码的编号与名称
       * 用于添加下级代码使用
       */
  	@SkipValidation
      public String searchTopCodeNo(){
  		 dic=dicService.searchCodeById(dicId);
  		setSelectNo(dic.getDicId());
    	  //获得代码主分类的代码名称
    	  dicName=dic.getDicName();
    	 dics=dicService.searchAllTopCode();
    	 if(dics.size()>0){
    		 return "createNextLevelCode";
    	 }else{
       	  return "info"; 
    	 }
      }
      
      
      /**
       * 通过系统编号查找系统分类代码
       * 用于编辑代码
       */
  	@SkipValidation
      public String searchCodeByNo(){

    	 if(dicService.searchCodeByNo(dicNo, dicNoParent)!=null){
        	 dic=dicService.searchCodeByNo(dicNo, dicNoParent).get(0);
    		 return "modifyTopCode";
    	 }else{
       	  return "info"; 
    	 }
      }
      
  	 /**
     * 通过系统编号查找系统分类代码
     * 用于编辑代码
     */
	@SkipValidation
    public String searchCodeById(){
  	 if(null!=dicId&&!"".equals(dicId)){
      	 dic=dicService.searchCodeById(dicId);
  		 return "modifyTopCode";
  	 }else{
     	  return "info"; 
  	 }
    }
        
      /**
       * 通过传入的上级系统代码编号查找该代码下的所有下级代码
  	 * @author wang zitao
  	 * @prama dicno本级代码编号，在查询时与副代码相对应
  	 * @return 代码信息列表
  	 */
  	@SkipValidation
      public String searchNextCodeByNo(){
  	      	 dic=dicService.searchCodeById(dicId);
    	  //获得二级分类代码列表
    	  dics=dicService.searchNextCodeByNo(dic.getDicNo());
    	  //获取主分类代码编号和名字
    	  Dic topcode=dicService.searchCodeByNo(dic.getDicNo(), dic.getDicNoParent()).get(0);
    	  setDicNo(topcode.getDicNo());
    	  setDicName(topcode.getDicName());
    		 return "showNextCode";
      }
      
      
      /**
       * 通过传入的二级代码编号和父代码编号查找父代码下的所有二级代码
       * 该action用于在二级代码添加完成后，跳向相应的二级代码管理页面
  	 * @author wang zitao
  	 * @prama codeno二级代码编号
  	 * @return 代码信息列表
  	 */
  	  @SkipValidation
      public String searchNext(){
    	  //获得二级分类代码列表
    	  dics=dicService.searchNextCodeByNo(dicNoParent);
    	  //获取主分类代码编号和名字
    	  Dic topcode=dicService.searchCodeByNo(dicNoParent, null).get(0);
    	  setDicNo(topcode.getDicNo());
    	  setDicName(topcode.getDicName());
    	  setDicId(topcode.getDicId());
    		 return "showNextCode";
      }
      
      /**
       * 通过系统编号查找系统二级分类代码信息
       * 用于编辑代码
       */
  	@SkipValidation
      public String searchNextCode(){
  		  dic=dicService.searchCodeById(dicId);
    	  dics=dicService.searchCodeByNo(dic.getDicNoParent(),null);
    	  List<Dic> codel=dicService.searchCodeByNo(dic.getDicNo(), dic.getDicNoParent());
          dic=codel.get(0);
    	  setDicNo(dics.get(0).getDicNo());
    	  setDicName(dics.get(0).getDicName());
    	 if(dic!=null){
    		 return "modifyNextLevelCode";
    	 }else{
       	  return "info"; 
    	 }
      }
      
     /**
      * 系统主分类代码添加
      */ 
      public String createTopCode(){
      if(dic.getDicNo()==null||"".equals(dic.getDicNo())){
    	  info="编号不可为空";
    	  return "fail";}
      if(dic.getDicName()==null||"".equals(dic.getDicName())){
    	  info="名字不可为空";
    	  return "fail";}
    	 char s=dicService.createCode(dic);
    	 if(s=='1'){
    	  info="创建成功";
    		 return "info";
    	  }
    	 else if(s=='2')
    	 {
    		  info="编号重复";
    		 return "info";
    	 }
    	 else
    	 {
    		  info="创建失败";
    		 return "info";
    	 }
    	 
      }
      
      /**
       * 系统二级分类代码添加
       */ 
       public String createNextLevelCode(){
    	   //数据校验
    	   if(dic.getDicNo()==null||"".equals(dic.getDicNo())){
    	    	  info="编号不可为空";
    	    	  return "fail";}
    	      if(dic.getDicName()==null||"".equals(dic.getDicName())){
    	    	  info="名字不可为空";
    	    	  return "fail";}
    	   //保存新纪录
    	 dic.setDicNoParent(dicNoParent);
     	 char s=dicService.createNextCode(dic);
     	 if(s=='1'){
     		 setDicNo(dic.getDicNo());
     		 setDicNoParent(dic.getDicNoParent());
     		 return "showNextCode";
     	  }
     	 else if(s=='2')
     	 {
   		  info="编号重复";
   		 return "info";
     	 }
     	 else
     	 {
   		  info="创建失败";
   		 return "info";
     	 }
     	 
       }
      /**
       * 系统代码编辑
       */
      public String modifyCode(){;
    	  char s=dicService.modifyCode(dic);
    	  if(s=='1'){
        	  info="修改成功";
        		 return "info";
        	  }
        	 else if(s=='2')
        	 {
        		 info=getText("代码重复");
        		 return "fail";
        	 }
        	 else
        	 {
        		 info=getText("创建失败");
        		 return "fail";
        	 }
      }

      
      
      /**
       * 系统二级代码编辑
       */
      public String modifyNextLevelCode(){
    	  dic.setDicNoParent(dicNoParent);
    	  if(dic.getDicNo()==null||"".equals(dic.getDicNo())){
    		  info="编号不可为空";
	     return "fail";}
	    if(dic.getDicName()==null||"".equals(dic.getDicName())){
	    	 info="名称不可为空";
	    	  return "fail";}
    	  char s=dicService.modifyCode(dic);
    	  if(s=='1'){
    		 setDicNo(dic.getDicNo());
      		 setDicNoParent(dic.getDicNoParent());
        		 return "showNextCode";
        	  }
    	  else if(s=='2')
     	 {
     		 info=getText("代码重复");
     		 return "fail";
     	 }
     	 else
     	 {
     		 info=getText("修改失败");
     		 return "fail";
     	 }
      }

      
      /**
       * 删除顶级代码
       */
      @SkipValidation
      public String deleteCode(){
    	  char s=dicService.deleteCode(dicId,dicNo);
    	  if('1'==s){
    	  return "admin";
    	  }
    	  else{
    	  return "fail";
    	  }
      }
      
      
      /**
       * 删除二级系统代码
       */
      @SkipValidation
      public String deleteNextCode(){
    	  char s=dicService.deleteNextCode(dicId);
    	  if('1'==s){
    	  return "showNextCode";
    	  }
    	  else{
    	  return "info";
    	  }
      }

      //主代码添加检验
      public void validateCreateTopCode(){
    	  if(dic.getDicNo()==null ||"".equals(dic.getDicNo())){
    			addFieldError("dic.dicNo",getText("error.dicNo"));
    		    }
      	  else if(!Pattern.matches("^\\w+$", dic.getDicNo().trim()))
      	  	{
    			addFieldError("dic.dicNo",getText("请输入字母或数字"));
      	  	}
      	  
    		if(dic.getDicName()==null||"".equals(dic.getDicName())){
    			addFieldError("dic.dicName",getText("error.dicName"));
    		}
    		if(dic.getDicOrder()==null ||"".equals(dic.getDicOrder())){
    			addFieldError("dic.dicOrder",getText("error.dicOrder"));
    		}
    	}
      
      //主代码修改检验
      public void validateModifyCode(){
    	  if(dic.getDicNo()==null ||"".equals(dic.getDicNo())){
  			addFieldError("dic.dicNo",getText("error.dicNo"));
  		    }
    	  else if(!Pattern.matches("^\\w+$", dic.getDicNo().trim()))
    	  	{
  			addFieldError("dic.dicNo",getText("error.dicNostr"));
    	  	}
    	  
  		if(dic.getDicName()==null||"".equals(dic.getDicName())){
  			addFieldError("dic.dicName",getText("error.dicName"));
  		}
  	}
    

    
  //子代码修改检验
    public void validateModifyNextLevelCode(){
    	if(dic.getDicNo()==null ||"".equals(dic.getDicNo())){
			addFieldError("dic.dicNo",getText("error.dicNo"));
		}
    	else if(!Pattern.matches("^\\w+$", dic.getDicNo().trim()))
			{
				addFieldError("dic.dicNo",getText("error.dicNostr"));
			}
		if(dic.getDicName()==null||"".equals(dic.getDicName())){
			addFieldError("dic.dicName",getText("error.dicName"));
		}
  	}
      

	public String getDicNameEn() {
		return dicNameEn;
	}


	public void setDicNameEn(String dicNameEn) {
		this.dicNameEn = dicNameEn;
	}


	public Dic getDic() {
		return dic;
	}


	public void setDic(Dic dic) {
		this.dic = dic;
	}


	public List<Dic> getDics() {
		return dics;
	}


	public void setDics(List<Dic> dics) {
		this.dics = dics;
	}


	public String getDicId() {
		return dicId;
	}


	public void setDicId(String dicId) {
		this.dicId = dicId;
	}


	public String getDicNo() {
		return dicNo;
	}


	public void setDicNo(String dicNo) {
		this.dicNo = dicNo;
	}


	public String getDicName() {
		return dicName;
	}


	public void setDicName(String dicName) {
		this.dicName = dicName;
	}


	public String getDicOrder() {
		return dicOrder;
	}


	public void setDicOrder(String dicOrder) {
		this.dicOrder = dicOrder;
	}


	public String getDicNoParent() {
		return dicNoParent;
	}


	public void setDicNoParent(String dicNoParent) {
		this.dicNoParent = dicNoParent;
	}


	public DicService getDicService() {
		return dicService;
	}


	public void setDicService(DicService dicService) {
		this.dicService = dicService;
	}


	public String getSelectNo() {
		return selectNo;
	}


	public void setSelectNo(String selectNo) {
		this.selectNo = selectNo;
	}

}